/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.Modelo;

import agb.Conexion.Conexion;
import java.sql.*;
import java.util.ArrayList;
import java.util.Vector;

/**
 *
 * @author Administrator
 */
public class EnlacesTemasSylabus {
    private String fechaInicio, fechaFin, tema, enlace, curso, descripcion,
            grado, nivel;
    private int codTema, codEnlace;
    /**
     * @return the fechaInicio
     */
    private String resultado;

    public String getResultado() {
        return resultado;
    }

    public void setResultado(String resultado) {
        this.resultado = resultado;
    }
    
    public String getFechaInicio() {
        return fechaInicio;
    }

    /**
     * @param fechaInicio the fechaInicio to set
     */
    public void setFechaInicio(String fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    /**
     * @return the fechaFin
     */
    public String getFechaFin() {
        return fechaFin;
    }

    /**
     * @param fechaFin the fechaFin to set
     */
    public void setFechaFin(String fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * @return the tema
     */
    public String getTema() {
        return tema;
    }

    /**
     * @param tema the tema to set
     */
    public void setTema(String tema) {
        this.tema = tema;
    }

    /**
     * @return the enlace
     */
    public String getEnlace() {
        return enlace;
    }

    /**
     * @param enlace the enlace to set
     */
    public void setEnlace(String enlace) {
        this.enlace = enlace;
    }

    /**
     * @return the curso
     */
    public String getCurso() {
        return curso;
    }

    /**
     * @param curso the curso to set
     */
    public void setCurso(String curso) {
        this.curso = curso;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public static ArrayList<EnlacesTemasSylabus> temasPorCursoNivelGradoYRangoFechas(int codCurso, int codNivelGrado,
            String fechaDesde, String fechaHasta){
        ArrayList<EnlacesTemasSylabus> LTemas = new ArrayList<EnlacesTemasSylabus>();
        EnlacesTemasSylabus oTema = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT T.nombre_tema, T.descripcion_tema, TO_CHAR(T.fechainicio_tema, 'DD/MM/YYY'), " +
                "TO_CHAR(T.fechafin_tema, 'DD/MM/YYY'), C.nombre " +
                " FROM tema_silabus T " +
                " INNER JOIN curso C ON T.cod_curso = C.cod_curso " +
                " WHERE T.cod_curso = ?  AND T.cod_nivel_grado = ?   " +
                " AND T.fechainicio_tema between  to_date(?, 'DD/MM/YYYY') " +
                " and to_date(?, 'DD/MM/YYYY') AND T.estado_tema = 'A' " +
                " order by T.fechainicio_tema" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codCurso);
            ps.setInt(2, codNivelGrado);
            ps.setString(3, fechaDesde);
            ps.setString(4, fechaHasta);
            rs = ps.executeQuery();
            while(rs.next()){
                oTema = new EnlacesTemasSylabus();
                oTema.setTema(rs.getString(1));
                oTema.setDescripcion(rs.getString(2));
                oTema.setFechaInicio(rs.getString(3));
                oTema.setFechaFin(rs.getString(4));
                oTema.setCurso(rs.getString(5));
                LTemas.add(oTema);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LTemas;
    }
    public static ArrayList<EnlacesTemasSylabus> temasPorCursoNivelGrado(int codCurso, int codNivelGrado){
        ArrayList<EnlacesTemasSylabus> LTemas = new ArrayList<EnlacesTemasSylabus>();
        EnlacesTemasSylabus oTema = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT T.cod_tema, T.nombre_tema " +
                " FROM tema_silabus T " +
                " INNER JOIN curso C ON T.cod_curso = C.cod_curso " +
                " WHERE T.cod_curso = ?  AND T.cod_nivel_grado = ?   " +
                " AND T.estado_tema = 'A' " +
                " order by T.fechainicio_tema" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codCurso);
            ps.setInt(2, codNivelGrado);
            rs = ps.executeQuery();
            while(rs.next()){
                oTema = new EnlacesTemasSylabus();
                oTema.setCodTema(rs.getInt(1));
                oTema.setTema(rs.getString(2));
                LTemas.add(oTema);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LTemas;
    }

    public static boolean registroEnlace(EnlacesTemasSylabus oEnlace){
        boolean rpta = false;
        Connection cn = null;

        PreparedStatement ps = null;

        String sql = "Insert into enlace (cod_enlace, nombre_enlace,estado_enlace, " +
                "descripcion_enlace, cod_tema_sylabus) " +
                "values (nextval('enlace_seq'), ?, 'A', ?,?)" ;
        try{
            cn = Conexion.getConexion();
            cn.setAutoCommit(false);
            ps = cn.prepareStatement(sql);
            ps.setString(1, oEnlace.getEnlace());
            ps.setString(2, oEnlace.getDescripcion());
            ps.setInt(3, oEnlace.getCodTema());
            rpta = ps.executeUpdate()==1?true:false;
            if(rpta){
                Conexion.confirmarTransaccion(cn);
            }else{
                Conexion.anularTransaccion(cn);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return rpta;
    }

    public static ArrayList<EnlacesTemasSylabus> enlacesPorNivelGradoCurso(int codCurso, int codNivelGrado){
        ArrayList<EnlacesTemasSylabus> LTemas = new ArrayList<EnlacesTemasSylabus>();
        EnlacesTemasSylabus oTema = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT T.nombre_tema, E.nombre_enlace, C.nombre " +
                    "FROM ENLACE E " +
                    "INNER JOIN tema_silabus T ON E.cod_tema_sylabus = T.cod_tema " +
                    "INNER JOIN CURSO C ON C.cod_curso = T.cod_curso " +
                    "WHERE T.cod_nivel_grado = ? " +
                    "AND T.cod_curso = ? " +
                    "AND E.estado_enlace = 'A' " +
                    "ORDER BY T.fechainicio_tema " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codNivelGrado);
            ps.setInt(2, codCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                oTema = new EnlacesTemasSylabus();
                oTema.setTema(rs.getString(1));
                oTema.setEnlace(rs.getString(2));
                oTema.setCurso(rs.getString(3));
                LTemas.add(oTema);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LTemas;
    }
    
    public static ArrayList<EnlacesTemasSylabus>  ListaEnlacesPorProfesor(int codPersonaProfesor,String resultado)
    {
    EnlacesTemasSylabus oEnlace = null;
        ArrayList<EnlacesTemasSylabus> LEnlaces = new ArrayList<EnlacesTemasSylabus>();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select E.cod_enlace, E.nombre_enlace,C.nombre, T.nombre_tema, G.nombre, NV.nombre  " +
                "FROM enlace E " +
                "inner join tema_silabus T ON T.cod_tema =E.cod_tema_sylabus " +
                "INNER JOIN CURSO C ON C.cod_curso = T.cod_curso " +
                "INNER JOIN profesor_curso P ON P.cod_curso= C.cod_curso " +
                "INNER JOIN profesor PF ON PF.cod_persona = P.cod_persona " +
                "INNER JOIN nivel_grado N ON T.cod_nivel_grado = N.cod_nivelgrado " +
                "INNER JOIN nivel NV ON NV.cod_nivel = N.cod_nivel " +
                "INNER JOIN grado G ON G.cod_grado = N.cod_grado " +
                "WHERE P.cod_persona = ? " +
              //  "AND C.cod_curso = ? " +
              //  "AND T.cod_nivel_grado = ? " +
                "and E.estado_enlace = 'A' " +
                "ORDER BY T.fechainicio_tema"  ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersonaProfesor);
          //  ps.setInt(2, codCurso);
            //ps.setInt(3, codNivelGrado);
            rs = ps.executeQuery();
            while(rs.next()){
                oEnlace = new EnlacesTemasSylabus();
                oEnlace.setCodEnlace(rs.getInt(1));
                oEnlace.setEnlace(rs.getString(2));
                oEnlace.setCurso(rs.getString(3));
                oEnlace.setTema(rs.getString(4));
                oEnlace.setGrado(rs.getString(5));
                oEnlace.setNivel(rs.getString(6));
                oEnlace.setResultado(resultado);
                LEnlaces.add(oEnlace);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LEnlaces;
    }
    
                                                                                    //int codCurso, int codNivelGrado 
   public static ArrayList<EnlacesTemasSylabus>  ListaEnlacesPorProfesorCursoNivelGrado(int codPersonaProfesor){
        EnlacesTemasSylabus oEnlace = null;
        ArrayList<EnlacesTemasSylabus> LEnlaces = new ArrayList<EnlacesTemasSylabus>();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select E.cod_enlace, E.nombre_enlace,C.nombre, T.nombre_tema, G.nombre, NV.nombre  " +
                "FROM enlace E " +
                "inner join tema_silabus T ON T.cod_tema =E.cod_tema_sylabus " +
                "INNER JOIN CURSO C ON C.cod_curso = T.cod_curso " +
                "INNER JOIN profesor_curso P ON P.cod_curso= C.cod_curso " +
                "INNER JOIN profesor PF ON PF.cod_persona = P.cod_persona " +
                "INNER JOIN nivel_grado N ON T.cod_nivel_grado = N.cod_nivelgrado " +
                "INNER JOIN nivel NV ON NV.cod_nivel = N.cod_nivel " +
                "INNER JOIN grado G ON G.cod_grado = N.cod_grado " +
                "WHERE P.cod_persona = ? " +
              //  "AND C.cod_curso = ? " +
              //  "AND T.cod_nivel_grado = ? " +
                "and E.estado_enlace = 'A' " +
                "ORDER BY T.fechainicio_tema"  ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersonaProfesor);
          //  ps.setInt(2, codCurso);
            //ps.setInt(3, codNivelGrado);
            rs = ps.executeQuery();
            while(rs.next()){
                oEnlace = new EnlacesTemasSylabus();
                oEnlace.setCodEnlace(rs.getInt(1));
                oEnlace.setEnlace(rs.getString(2));
                oEnlace.setCurso(rs.getString(3));
                oEnlace.setTema(rs.getString(4));
                oEnlace.setGrado(rs.getString(5));
                oEnlace.setNivel(rs.getString(6));
                LEnlaces.add(oEnlace);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LEnlaces;
    }

      public static boolean eliminarEnlace(int codEnlace){
        boolean rpta = false;
        Connection cn = null;
        PreparedStatement ps = null;
        String sql = "DELETE FROM ENLACE  WHERE cod_enlace = ?" ;
        try{
            cn = Conexion.getConexion();
            cn.setAutoCommit(false);
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codEnlace);
            rpta = ps.executeUpdate()==1?true:false;
            if(rpta){
                Conexion.confirmarTransaccion(cn);
            }else{
                Conexion.anularTransaccion(cn);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return rpta;
    }

    /**
     * @return the codTema
     */
    public int getCodTema() {
        return codTema;
    }

    /**
     * @param codTema the codTema to set
     */
    public void setCodTema(int codTema) {
        this.codTema = codTema;
    }

    /**
     * @return the codEnlace
     */
    public int getCodEnlace() {
        return codEnlace;
    }

    /**
     * @param codEnlace the codEnlace to set
     */
    public void setCodEnlace(int codEnlace) {
        this.codEnlace = codEnlace;
    }

    /**
     * @return the grado
     */
    public String getGrado() {
        return grado;
    }

    /**
     * @param grado the grado to set
     */
    public void setGrado(String grado) {
        this.grado = grado;
    }

    /**
     * @return the nivel
     */
    public String getNivel() {
        return nivel;
    }

    /**
     * @param nivel the nivel to set
     */
    public void setNivel(String nivel) {
        this.nivel = nivel;
    }
}
